package com.seeyon.ctp.rest.resources;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.seeyon.apps.brwh.kit.StrKit;
import com.seeyon.apps.ltc.manager.LtcKanBanDataManager;
import com.seeyon.apps.ltc.manager.LtcKanBanSaleStandardDataManager;
import com.seeyon.cap4.form.bean.FormBean;
import com.seeyon.cap4.form.service.CAP4FormManager;
import com.seeyon.ctp.common.AppContext;
import com.seeyon.ctp.common.exceptions.BusinessException;
import com.seeyon.ctp.common.log.CtpLogFactory;
import io.lettuce.core.dynamic.annotation.Param;
import org.apache.commons.logging.Log;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author lw
 * @description: TODO
 * @date 2024年09月09日
 */
@Path("/jssdk")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class KanBanDataLTCResource extends BaseResource {

    private CAP4FormManager cap4FormManager = (CAP4FormManager) AppContext.getBean("cap4FormManager");
    private static final Log log = CtpLogFactory.getLog(KanBanDataLTCResource.class);
    private LtcKanBanDataManager ltcKanBanDataManager = (LtcKanBanDataManager) AppContext.getBean("ltcKanBanDataManager");
    private LtcKanBanSaleStandardDataManager ltcKanBanSaleStandardDataManager = (LtcKanBanSaleStandardDataManager) AppContext.getBean("ltcKanBanSaleStandardDataManager");
    /**
     * 通过POST销售规范动作的接口。
     *
     * @return 返回处理结果，包括状态码、数据和消息。
     * @throws Exception 如果处理过程中发生异常。
     */
    @POST
    @Path("ltc/saleStandardAction")
    public Response ltcSaleStandardAction() throws Exception{
        return this.ok(JSON.toJSONString(ltcKanBanSaleStandardDataManager.getLtcSaleStandardAction()));
    }

    /**
     * 通过POST获取开发档案项目信息的接口。
     * @param  param
     * @return 返回处理结果，包括状态码、数据和消息。
     * @throws Exception 如果处理过程中发生异常。
     */
    @POST
    @Path("ltc/projectinfos")
    public Response ipdProjectInfoData(Map<String, Object> param) throws Exception {
          // 记录请求参数的日志信息。
        log.info("项目信息模块前端入参:" + JSON.toJSONString(param));
        Map<String, Object> result = new HashMap<String, Object>();
        List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
        try {
            // 从param Map中提取项目名称、开始时间和结束时间。
            JSONObject jsonObject = new JSONObject(param);
            String projectName = "";
            if (jsonObject.containsKey("projectName")) {
                projectName = StrKit.str(jsonObject.get("projectName"));
            }

            String unitId = "";
            if (jsonObject.containsKey("unitId")) {
                unitId = StrKit.str(jsonObject.get("unitId"));
            }
            String level= "";
            if (jsonObject.containsKey("level")) {
                level = StrKit.str(jsonObject.get("level"));
            }

            String proManagerName= "";
            if (jsonObject.containsKey("proManagerName")) {
                proManagerName = StrKit.str(jsonObject.get("proManagerName"));
            }
            String cusManagerName= "";
            if (jsonObject.containsKey("cusManagerName")) {
                cusManagerName = StrKit.str(jsonObject.get("cusManagerName"));
            }


            // 根据项目名称、开始时间和结束时间，从数据库中查询项目信息数据列表。
            dataList = ltcKanBanDataManager.getProjectInfoDataList(projectName, level,proManagerName,cusManagerName, unitId);
            /*查穿透档案表链接*/
            result.put("code", 200);
            result.put("data", dataList);
            result.put("msg", "");
            return ok(JSON.toJSONString(result));
        } catch (Exception e) {
            // 记录业务异常的日志信息。
            log.error("获取项目信息模块数据报错异常信息:", e);
            // 设置返回结果的错误代码、空数据和错误消息。
            result.put("code", 500);
            result.put("data", "");
            result.put("msg", e.getMessage());
            return ok(JSON.toJSONString(result));
        }
    }


    /***
     * @desc:  销售项目信息穿透列表接口
     * @param

     */
    @GET
    @Path("ltc/getProjectsUrl")
    public Response getProjectsUrl() throws Exception {

        Map<String, Object> result = new HashMap<String, Object>();
        try {
            // 根据项目名称、开始时间和结束时间，从数据库中查询项目信息数据列表。
            String url = ltcKanBanDataManager.getProjectsUrl();
            /*查穿透档案表链接*/
            // 设置返回结果的代码、数据和消息字段。
            result.put("code", 200);
            result.put("msg", "");
            result.put("url", url);
            return ok(JSON.toJSONString(result));
        } catch (Exception e) {
            // 记录业务异常的日志信息。
            log.error("获取项目信息模块数据报错异常信息:", e);
            // 设置返回结果的错误代码、空数据和错误消息。
            result.put("code", 500);
            result.put("url", " ");
            result.put("msg", e.getMessage());
            return ok(JSON.toJSONString(result));
        }
    }




    /***
     * @desc:  获取项目经理资源池接口
     * @param param 经理类型
     * @return Response
     */
    @POST
    @Path("ltc/getResourcePool")
    public Response getResourcePool(Map<String, Object> param)  {
        // 记录请求参数的日志信息。
        log.info("资源池模块前端入参:" + JSON.toJSONString(param));
        Map<String, Object> result = new HashMap<String, Object>();
        List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
        try {
            // 从param Map中提取项目名称、开始时间和结束时间。
            JSONObject jsonObject = new JSONObject(param);
            String rosourceType = "";
            if (jsonObject.containsKey("rosourceType")) {
                rosourceType = StrKit.str(jsonObject.get("rosourceType"));
            }

            dataList = ltcKanBanDataManager.getResourcePool(rosourceType);
            // 设置返回结果的代码、数据和消息字段。
            result.put("code", 200);
            result.put("data", dataList);
            result.put("msg", "");
            return ok(JSON.toJSONString(result));
        } catch (Exception e) {
            // 记录业务异常的日志信息。
            log.error("获取项目信息模块数据报错异常信息:", e);
            // 设置返回结果的错误代码、空数据和错误消息。
            result.put("code", 500);
            result.put("data", "");
            result.put("msg", e.getMessage());
            return ok(JSON.toJSONString(result));
        }
    }

    /**
     * @desc:  根据父枚举编码获取子枚举列表
     * @param
     */

    @GET
    @Path("ltc/projectinfos/getQueryEnumList")
    public Response getQueryEnumList(Map<String, Object> param){
        log.info("getQueryEnumList前端入参:" + JSON.toJSONString(param));
        Map<String, Object> result = new HashMap<String, Object>();
        List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
        try {

            // 从param Map中提取项目名称、开始时间和结束时间。
            JSONObject jsonObject = new JSONObject(param);
            String parentEnumCode = "";
            if (jsonObject.containsKey("parentEnumCode")) {
                parentEnumCode = StrKit.str(jsonObject.get("parentEnumCode"));
            }
            dataList = ltcKanBanDataManager.getQueryEnumList(parentEnumCode);
            result.put("code", 200);
            result.put("data", dataList);
            result.put("msg", "");
            return ok(JSON.toJSONString(result));
        }catch (Exception e){
            // 记录业务异常的日志信息。
            log.error("获取项目信息模块数据报错异常信息:", e);
            // 设置返回结果的错误代码、空数据和错误消息。
            result.put("code", 500);
            result.put("data", "");
            result.put("msg", e.getMessage());
            return ok(JSON.toJSONString(result));
        }
    }

    @GET
    @Path("ltc/projectinfos/getQueryParms")
    public Response getQueryParms(){
        Map<String, Object> result = new HashMap<String, Object>();
        List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
        try {

            dataList = ltcKanBanDataManager.getQueryParms();
            result.put("code", 200);
            result.put("data", dataList);
            result.put("msg", "");
            return ok(JSON.toJSONString(result));
        }catch (Exception e){
            // 记录业务异常的日志信息。
            log.error("获取项目信息模块数据报错异常信息:", e);
            // 设置返回结果的错误代码、空数据和错误消息。
            result.put("code", 500);
            result.put("data", "");
            result.put("msg", e.getMessage());
            return ok(JSON.toJSONString(result));
        }
    }


    /*根据条件查询人员列表或者部门列表
    部门--department
    项目经理--proManager
    客户经理--cusManager
    */
    @GET
    @Path("ltc/projectinfos/getQueryOrgOrDepList")
    public Response getQueryOrgOrDepList( Map<String, Object> parm){
        Map<String, Object> result = new HashMap<String, Object>();
        List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
        try {
            JSONObject jsonObject = new JSONObject(parm);
            String queryCondition = "";
            if (jsonObject.containsKey("queryCondition")) {
                queryCondition = StrKit.str(jsonObject.get("queryCondition"));
            }
            dataList = ltcKanBanDataManager.getQueryOrgOrDepList(queryCondition);
            result.put("code", 200);
            result.put("data", dataList);
            result.put("msg", "");
            return ok(JSON.toJSONString(result));
        }catch (Exception e){
            // 记录业务异常的日志信息。
            log.error("获取项目信息模块数据报错异常信息:", e);
            // 设置返回结果的错误代码、空数据和错误消息。
            result.put("code", 500);
            result.put("data", "");
            result.put("msg", e.getMessage());
            return ok(JSON.toJSONString(result));
        }
    }



    /**
     * 获取警告中心列表的接口方法
     *
     * @return 返回一个包含警告中心列表的JSON响应
     */
    @GET
    @Path("ltc/getWarningCenterList")
    public Response getWarningCenterList(){
        // 用于存放最终返回结果的Map
        Map<String, Object> result = new HashMap<String, Object>();
        // 用于存放警告中心数据列表的Map列表
        List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
        try {
            // 调用数据管理类的方法获取警告中心列表数据
            dataList = ltcKanBanDataManager.getWarningCenterList();
            // 设置返回结果的正确代码、数据和空消息
            result.put("code", 200);
            result.put("data", dataList);
            result.put("msg", "");
            // 返回处理成功的JSON响应
            return ok(JSON.toJSONString(result));
        }catch (Exception e){
            // 记录业务异常的日志信息。
            log.error("获取项目信息模块数据报错异常信息:", e);
            // 设置返回结果的错误代码、空数据和错误消息
            result.put("code", 500);
            result.put("data", "");
            result.put("msg", e.getMessage());
            // 返回处理失败的JSON响应
            return ok(JSON.toJSONString(result));
        }
    }


    /**
     * 通过POST调用五个一代码接口。
     *
     * @return 返回处理结果，包括状态码、数据和消息。
     * @throws Exception 如果处理过程中发生异常。
     */
    @POST
    @Path("ltc/getLtcFiveofOne")
    public Response getLtcFiveofOne() throws BusinessException, SQLException, ParseException {
        return this.ok(JSON.toJSONString(ltcKanBanDataManager.getLtcFiveofOne()));
    }


    /**
     * 通过POST调用合同评审第一层穿透代码接口。
     *
     * @return 返回处理结果，包括状态码、数据和消息。
     * @throws Exception 如果处理过程中发生异常。
     */
    @POST
    @Path("ltc/getContractReviewFirstOne")
    public Response getContractReviewFirstOne() throws BusinessException, SQLException, ParseException {
        return this.ok(JSON.toJSONString(ltcKanBanDataManager.getContractReviewFirstOne()));
    }

    /**
     * 通过POST调用合同评审第二层穿透代码接口。
     * type类型 分为 事业部，四要素，销售总监
     * @return 返回处理结果，包括状态码、数据和消息。
     * @throws Exception 如果处理过程中发生异常。
     */
    @POST
    @Path("ltc/getContractReviewSecondOne")
    public Response getContractReviewSecondOne(Map<String,Object> params) throws BusinessException, SQLException, ParseException {
        return this.ok(JSON.toJSONString(ltcKanBanDataManager.getContractReviewSecondOne(params.get("type").toString())));
    }
    /**
     * 通过POST调用项目成功率代码接口。
     *
     * @return 返回处理结果，包括状态码、数据和消息。
     * @throws Exception 如果处理过程中发生异常。
     */
    @POST
    @Path("ltc/getProjectInfoDataList")
    public Response getProjectInfoDataList() throws Exception{
        return this.ok(JSON.toJSONString(ltcKanBanDataManager.getProjectInfoDataList()));
    }

    /**
     * 通过POST调用项目成功率代码接口。
     *
     * @return 返回处理结果，包括状态码、数据和消息。
     * @throws Exception 如果处理过程中发生异常。
     */
    @POST
    @Path("ltc/getFiveTest")
    public Response getFiveTest(Map<String,Object> params) throws Exception{
        return this.ok(JSON.toJSONString(ltcKanBanDataManager.getFiveTest(params.get("type").toString())));
    }
}

